//============================================================================================
/**
 * @file	sysflag.c
 * @brief	プログラム、スクリプトからアクセスされるシステムフラグ操作
 * @author	Satoshi Nohara
 * @date	06.03.12
 */
//============================================================================================
#include "common.h"
#include "system/pm_rtc.h"			//GF_RTC_IsNightTime
#include "system/snd_tool.h"
#include "fieldsys.h"
#include "script.h"
#include "field/evwkdef.h"
#include "sysflag.h"
#include "contest/contest_def.h"
#include "mapdefine.h"				//ZONE_ID_C01

#include "fielddata/script/saveflag.h"

//============================================================================================
//
//	プロトタイプ宣言
//
//============================================================================================
static void SysFlag_Set( EVENTWORK* ev, u16 flag );
static void SysFlag_Reset( EVENTWORK* ev, u16 flag );
static BOOL SysFlag_Check( EVENTWORK* ev, u16 flag );
static BOOL SysFlag_Common( EVENTWORK* ev, SYSFLAG_MODE mode, u32 flag_id);


//============================================================================================
//
//	関数
//
//============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * システムフラグセット
 *
 * @param	ev			EVENTWORKのポインタ
 * @param	flag		フラグナンバー
 *
 * @retval	none
 *
 * システムフラグは、スクリプトのセーブフラグを使用している
 */
//--------------------------------------------------------------------------------------------
static void SysFlag_Set( EVENTWORK* ev, u16 flag )
{
	EventWork_SetEventFlag( ev, flag );
	return;
}

//--------------------------------------------------------------------------------------------
/**
 * システムフラグリセット
 *
 * @param	ev			EVENTWORKのポインタ
 * @param	flag		フラグナンバー
 *
 * @retval	none
 *
 * システムフラグは、スクリプトのセーブフラグを使用している
 */
//--------------------------------------------------------------------------------------------
static void SysFlag_Reset( EVENTWORK* ev, u16 flag )
{
	EventWork_ResetEventFlag( ev, flag );
	return;
}

//--------------------------------------------------------------------------------------------
/**
 * システムフラグチェック
 *
 * @param	ev			EVENTWORKのポインタ
 * @param	flag		フラグナンバー
 *
 * @retval	"1 = フラグON"
 * @retval	"0 = フラグOFF"
 *
 * システムフラグは、スクリプトのセーブフラグを使用している
 */
//--------------------------------------------------------------------------------------------
static BOOL SysFlag_Check( EVENTWORK* ev, u16 flag )
{
	return EventWork_CheckEventFlag( ev, flag );
}

//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
static BOOL SysFlag_Common( EVENTWORK* ev, SYSFLAG_MODE mode, u32 flag_id)
{
	switch (mode) {
	case SYSFLAG_MODE_SET:
		SysFlag_Set( ev, flag_id);
		break;
	case SYSFLAG_MODE_RESET:
		SysFlag_Reset( ev, flag_id);
		break;
	case SYSFLAG_MODE_CHECK:
		return SysFlag_Check( ev, flag_id);
	default:
		GF_ASSERT_MSG(0, "FLAG %d, NOT DEFINED MODE %d\n", flag_id, mode);
	}
	return FALSE;
}

//============================================================================================
//
//	バッグ関連
//
//============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * バッグ入手フラグのセット
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	none
 */
//--------------------------------------------------------------------------------------------
void SysFlag_BagSet( EVENTWORK* ev )
{
	SysFlag_Set( ev, SYS_FLAG_BAG_GET );
	return;
}

//--------------------------------------------------------------------------------------------
/**
 * バッグ入手フラグのチェック
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	"1 = フラグON"
 * @retval	"0 = フラグOFF"
 */
//--------------------------------------------------------------------------------------------
BOOL SysFlag_BagCheck( EVENTWORK* ev )
{
	return SysFlag_Check( ev, SYS_FLAG_BAG_GET );
}

//============================================================================================
//
//	ゲームクリア関連
//
//============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * ゲームクリアフラグのセット
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	none
 */
//--------------------------------------------------------------------------------------------
void SysFlag_GameClearSet( EVENTWORK* ev )
{
	SysFlag_Set( ev, SYS_FLAG_GAME_CLEAR );
	return;
}

//--------------------------------------------------------------------------------------------
/**
 * ゲームクリアフラグのチェック
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	"1 = フラグON"
 * @retval	"0 = フラグOFF"
 */
//--------------------------------------------------------------------------------------------
BOOL SysFlag_GameClearCheck( EVENTWORK* ev )
{
	return SysFlag_Check( ev, SYS_FLAG_GAME_CLEAR );
}


//============================================================================================
//
//	連れ歩きフラグ関連
//
//============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * 連れ歩きフラグのセット
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	none
 */
//--------------------------------------------------------------------------------------------
void SysFlag_PairSet( EVENTWORK* ev )
{
	SysFlag_Set( ev, SYS_FLAG_PAIR );
	return;
}

//--------------------------------------------------------------------------------------------
/**
 * 連れ歩きフラグのリセット
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	none
 */
//--------------------------------------------------------------------------------------------
void SysFlag_PairReset( EVENTWORK* ev )
{
	SysFlag_Reset( ev, SYS_FLAG_PAIR );
	return;
}

//--------------------------------------------------------------------------------------------
/**
 * 連れ歩きフラグのチェック
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	"1 = フラグON"
 * @retval	"0 = フラグOFF"
 */
//--------------------------------------------------------------------------------------------
BOOL SysFlag_PairCheck( EVENTWORK* ev )
{
	return SysFlag_Check( ev, SYS_FLAG_PAIR );
}

//--------------------------------------------------------------------------------------------
/**
 * 葉っぱ入手フラグのチェック
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	"1 = フラグON"
 * @retval	"0 = フラグOFF"
 */
//--------------------------------------------------------------------------------------------
BOOL SysFlag_GetLeafCheck( EVENTWORK* ev )
{
	return SysFlag_Check( ev, SYS_FLAG_LEAF_GET );
}

//--------------------------------------------------------------------------------------------
/**
 * 葉っぱ入手フラグのセット
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	"1 = フラグON"
 * @retval	"0 = フラグOFF"
 */
//--------------------------------------------------------------------------------------------
void SysFlag_SetLeaf( EVENTWORK* ev )
{
	SysFlag_Set( ev, SYS_FLAG_LEAF_GET );
}

//============================================================================================
//
//	一歩動いたかフラグ関連
//
//============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * 一歩動いたかフラグのセット
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	none
 */
//--------------------------------------------------------------------------------------------
void SysFlag_OneStepSet( EVENTWORK* ev )
{
	SysFlag_Set( ev, SYS_FLAG_ONE_STEP );
	return;
}

//--------------------------------------------------------------------------------------------
/**
 * 一歩動いたかフラグのリセット
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	none
 */
//--------------------------------------------------------------------------------------------
void SysFlag_OneStepReset( EVENTWORK* ev )
{
	SysFlag_Reset( ev, SYS_FLAG_ONE_STEP );
	return;
}

//--------------------------------------------------------------------------------------------
/**
 * 一歩動いたかフラグのチェック
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	"1 = フラグON"
 * @retval	"0 = フラグOFF"
 */
//--------------------------------------------------------------------------------------------
BOOL SysFlag_OneStepCheck( EVENTWORK* ev )
{
	return SysFlag_Check( ev, SYS_FLAG_ONE_STEP );
}

//============================================================================================
//
//	バトルサーチャーのバッテリーを使用しているかフラグ関連
//
//============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * バトルサーチャーのバッテリーを使用しているかフラグのセット
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	none
 */
//--------------------------------------------------------------------------------------------
void SysFlag_BtlSearcherUseSet( EVENTWORK* ev )
{
	SysFlag_Set( ev, SYS_FLAG_BTL_SEARCHER_USE );
	return;
}

//--------------------------------------------------------------------------------------------
/**
 * バトルサーチャーのバッテリーを使用しているかフラグのリセット
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	none
 */
//--------------------------------------------------------------------------------------------
void SysFlag_BtlSearcherUseReset( EVENTWORK* ev )
{
	SysFlag_Reset( ev, SYS_FLAG_BTL_SEARCHER_USE );
	return;
}

//--------------------------------------------------------------------------------------------
/**
 * バトルサーチャーのバッテリーを使用しているかフラグのチェック
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	"1 = フラグON"
 * @retval	"0 = フラグOFF"
 */
//--------------------------------------------------------------------------------------------
BOOL SysFlag_BtlSearcherUseCheck( EVENTWORK* ev )
{
	return SysFlag_Check( ev, SYS_FLAG_BTL_SEARCHER_USE );
}

//============================================================================================
//
//	ロケット団変装中フラグ関連
//
//============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * ロケット団変装中フラグのセット
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	none
 */
//--------------------------------------------------------------------------------------------
void SysFlag_DisguiseSet( EVENTWORK* ev )
{
	SysFlag_Set( ev, SYS_FLAG_DISGUISE );
	return;
}

//--------------------------------------------------------------------------------------------
/**
 * ロケット団変装中フラグのリセット
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	none
 */
//--------------------------------------------------------------------------------------------
void SysFlag_DisguiseReset( EVENTWORK* ev )
{
	SysFlag_Reset( ev, SYS_FLAG_DISGUISE );
	return;
}

//--------------------------------------------------------------------------------------------
/**
 * ロケット団変装中フラグのチェック
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	"1 = フラグON"
 * @retval	"0 = フラグOFF"
 */
//--------------------------------------------------------------------------------------------
BOOL SysFlag_DisguiseCheck( EVENTWORK* ev )
{
	return SysFlag_Check( ev, SYS_FLAG_DISGUISE );
}

//============================================================================================
//
//	バトルサーチャー：フラグ関連
//
//============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * バトルサーチャー フラグのセット
 *
 * @param	ev		EVENTWORKのポインタ
 * @param	lv		レベル(1-5)
 *
 * @retval	none
 */
//--------------------------------------------------------------------------------------------
void SysFlag_BsLvSet( EVENTWORK* ev, int lv )
{
	SysFlag_Set( ev, SYS_FLAG_BS_LV1+(lv-1) );
}

//--------------------------------------------------------------------------------------------
/**
 * バトルサーチャー フラグのリセット
 *
 * @param	ev		EVENTWORKのポインタ
 * @param	lv		レベル(1-5)
 *
 * @retval	none
 */
//--------------------------------------------------------------------------------------------
void SysFlag_BsLvReset( EVENTWORK* ev, int lv )
{
	SysFlag_Reset( ev, SYS_FLAG_BS_LV1+(lv-1) );
}

//--------------------------------------------------------------------------------------------
/**
 * バトルサーチャー フラグのチェック
 *
 * @param	ev		EVENTWORKのポインタ
 * @param	lv		レベル(1-5)
 *
 * @retval	"1 = フラグON"
 * @retval	"0 = フラグOFF"
 */
//--------------------------------------------------------------------------------------------
BOOL SysFlag_BsLvCheck( EVENTWORK* ev, int lv )
{
	return SysFlag_Check( ev, SYS_FLAG_BS_LV1+(lv-1) );
}


//============================================================================================
//
//	アンノーンパズルクリア：フラグ関連
//
//============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * アンノーンパズルクリアフラグのセット
 *
 * @param	ev		EVENTWORKのポインタ
 * @param	lv		レベル
 *
 * @retval	none
 */
//--------------------------------------------------------------------------------------------
void SysFlag_AnPuzzleClearSet( EVENTWORK* ev, int lv )
{
	switch( lv ){
	case  AN_PUZZLE_LEVEL01:
		SysFlag_Set( ev, SYS_FLAG_AN_PUZZLE_LV1 );
		break;
	case  AN_PUZZLE_LEVEL02:
		SysFlag_Set( ev, SYS_FLAG_AN_PUZZLE_LV2 );
		break;
	case  AN_PUZZLE_LEVEL03:
		SysFlag_Set( ev, SYS_FLAG_AN_PUZZLE_LV3 );
		break;
	case  AN_PUZZLE_LEVEL04:
		SysFlag_Set( ev, SYS_FLAG_AN_PUZZLE_LV4 );
		break;
	};

	return;
}

//--------------------------------------------------------------------------------------------
/**
 * アンノーンパズルクリアフラグのチェック
 *
 * @param	ev		EVENTWORKのポインタ
 * @param	lv		レベル
 *
 * @retval	"1 = フラグON"
 * @retval	"0 = フラグOFF"
 */
//--------------------------------------------------------------------------------------------
BOOL SysFlag_AnPuzzleClearCheck( EVENTWORK* ev,int lv )
{
	int ret = FALSE;

	switch( lv ){
	case  AN_PUZZLE_LEVEL01:
		ret = SysFlag_Check( ev, SYS_FLAG_AN_PUZZLE_LV1 );
		break;
	case  AN_PUZZLE_LEVEL02:
		ret = SysFlag_Check( ev, SYS_FLAG_AN_PUZZLE_LV2 );
		break;
	case  AN_PUZZLE_LEVEL03:
		ret = SysFlag_Check( ev, SYS_FLAG_AN_PUZZLE_LV3 );
		break;
	case  AN_PUZZLE_LEVEL04:
		ret = SysFlag_Check( ev, SYS_FLAG_AN_PUZZLE_LV4 );
		break;
	};
	return ret;
}

/**
 *	@brief	貯金システムフラグ設定
 */
void SysFlag_DepositSet(EVENTWORK* ev,BOOL flag)
{
	if(flag){
		SysFlag_Set( ev, SYS_FLAG_DEPOSIT );
	}else{
		SysFlag_Reset( ev, SYS_FLAG_DEPOSIT);
	}
}

/**
 *	@brief	貯金システムフラグチェック
 */
BOOL SysFlag_IsDepositEnable(EVENTWORK* ev)
{
	return SysFlag_Check( ev, SYS_FLAG_DEPOSIT );
}

//============================================================================================
//
//	イベントBGM切り替え：フラグ関連
//
//	フラグ操作とは意味合いが違うのでここのソースに入れるのは微妙。。。
//
//	フラグ定義はこのソースだけで参照したい、
//	case分は２箇所に書きたくない、
//	昼夜指定がある、
//
//	テーブル作って、ゾーン、フラグ、BGM昼、BGM夜を作るいいかも。
//	テーブル置く場所は、ここになる？(フラグはこのソースだけで参照したいので)
//	。。。とりあえず保留。
//
//============================================================================================
typedef struct EVENT_BGM_DATA{
	u16 zone_id;
	u16	flag_id;
	u16	bgm_no;
}EVENT_BGM_DATA;

static const EVENT_BGM_DATA DATA_EventBgmData[] = {
 {	ZONE_ID_D22R0101,	SYS_FLAG_BGM_D22,	SEQ_GS_TAIKAIMAE_D5	},
 {	ZONE_ID_R35R0201,	SYS_FLAG_BGM_D22,	SEQ_GS_TAIKAIMAE	},
 {	ZONE_ID_R36R0201,	SYS_FLAG_BGM_D22,	SEQ_GS_TAIKAIMAE	},
 {	ZONE_ID_T04GYM0101,	SYS_FLAG_BGM_T04GYM0101,	SEQ_GS_EYE_ROCKET	},
 {	ZONE_ID_R24,		SYS_FLAG_BGM_R24,	SEQ_GS_EYE_ROCKET	},
 {	ZONE_ID_D10R0101,	SYS_FLAG_BGM_D10,	SEQ_GS_SAFARI_FIELD	},
 {	ZONE_ID_D23R0101,	SYS_FLAG_BGM_D23,	SEQ_GS_SENKYO	},
 {	ZONE_ID_D23R0102,	SYS_FLAG_BGM_D23,	SEQ_GS_SENKYO	},
 {	ZONE_ID_D23R0103,	SYS_FLAG_BGM_D23,	SEQ_GS_SENKYO	},
 {	ZONE_ID_D23R0104,	SYS_FLAG_BGM_D23,	SEQ_GS_SENKYO	},
 {	ZONE_ID_D23R0105,	SYS_FLAG_BGM_D23,	SEQ_GS_SENKYO	},
 {	ZONE_ID_D23R0106,	SYS_FLAG_BGM_D23,	SEQ_GS_SENKYO	},
 {	ZONE_ID_D23R0107,	SYS_FLAG_BGM_D23,	SEQ_GS_SENKYO	},
};

//--------------------------------------------------------------------------------------------
/**
 * イベントBGM切り替え フラグのチェックをして、切り替えるBGMナンバーを取得
 *
 * @param	ev		EVENTWORKのポインタ
 * @param	zone_id ゾーンID
 *
 * @retval	"0		= フラグオフなので何もなし"
 * @retval	"0以外	= 変更するBGMナンバー"
 */
//--------------------------------------------------------------------------------------------
u16 SysFlag_EventBgmGet( EVENTWORK* ev, int zone_id )
{
	int i;

	for(i = 0;i < NELEMS(DATA_EventBgmData);i++){
		if(	(DATA_EventBgmData[i].zone_id == zone_id) &&
			(SysFlag_Check(ev,DATA_EventBgmData[i].flag_id))){
			return DATA_EventBgmData[i].bgm_no;
		}
	}
	return 0;
}


//============================================================================================
//
//	通信カウンター通過フラグ関連
//
//============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * 通信カウンター通過フラグのセット
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	none
 */
//--------------------------------------------------------------------------------------------
void SysFlag_CommCounterSet( EVENTWORK* ev )
{
	SysFlag_Set( ev, SYS_FLAG_COMM_COUNTER );
	return;
}

//--------------------------------------------------------------------------------------------
/**
 * 通信カウンター通過フラグのリセット
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	none
 */
//--------------------------------------------------------------------------------------------
void SysFlag_CommCounterReset( EVENTWORK* ev )
{
	SysFlag_Reset( ev, SYS_FLAG_COMM_COUNTER );
	return;
}

//--------------------------------------------------------------------------------------------
/**
 * 通信カウンター通過フラグのチェック
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	"1 = フラグON"
 * @retval	"0 = フラグOFF"
 */
//--------------------------------------------------------------------------------------------
BOOL SysFlag_CommCounterCheck( EVENTWORK* ev )
{
	return SysFlag_Check( ev, SYS_FLAG_COMM_COUNTER );
}

//============================================================================================
//
//	GTCオープンフラグ関連
//
//============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * GTCオープンフラグのセット
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	none
 */
//--------------------------------------------------------------------------------------------
void SysFlag_GTCOpenSet( EVENTWORK* ev )
{
	SysFlag_Set( ev, SYS_FLAG_GTC_OPEN );
	return;
}

//--------------------------------------------------------------------------------------------
/**
 * GTCオープンフラグのリセット
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	none
 */
//--------------------------------------------------------------------------------------------
void SysFlag_GTCOpenReset( EVENTWORK* ev )
{
	SysFlag_Reset( ev, SYS_FLAG_GTC_OPEN );
	return;
}

//--------------------------------------------------------------------------------------------
/**
 * GTCオープンフラグのチェック
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	"1 = フラグON"
 * @retval	"0 = フラグOFF"
 */
//--------------------------------------------------------------------------------------------
BOOL SysFlag_GTCOpenCheck( EVENTWORK* ev )
{
	return SysFlag_Check( ev, SYS_FLAG_GTC_OPEN );
}


//============================================================================================
//
//	バトルタワーオープンフラグ関連
//
//============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * バトルタワーオープンフラグのセット
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	none
 */
//--------------------------------------------------------------------------------------------
void SysFlag_BTowerOpenSet( EVENTWORK* ev )
{
	SysFlag_Set( ev, SYS_FLAG_BTOWER_OPEN );
	return;
}

//--------------------------------------------------------------------------------------------
/**
 * バトルタワーオープンフラグのリセット
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	none
 */
//--------------------------------------------------------------------------------------------
void SysFlag_BTowerOpenReset( EVENTWORK* ev )
{
	SysFlag_Reset( ev, SYS_FLAG_BTOWER_OPEN );
	return;
}

//--------------------------------------------------------------------------------------------
/**
 * バトルタワーオープンフラグのチェック
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	"1 = フラグON"
 * @retval	"0 = フラグOFF"
 */
//--------------------------------------------------------------------------------------------
BOOL SysFlag_BTowerOpenCheck( EVENTWORK* ev )
{
	return SysFlag_Check( ev, SYS_FLAG_BTOWER_OPEN );
}

//============================================================================================
//
//	マサキフラグ関連
//
//============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * マサキフラグのセット
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	none
 */
//--------------------------------------------------------------------------------------------
void SysFlag_MasakiSet( EVENTWORK* ev )
{
	SysFlag_Set( ev, SYS_FLAG_MASAKI );
	return;
}

//--------------------------------------------------------------------------------------------
/**
 * マサキフラグのリセット
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	none
 */
//--------------------------------------------------------------------------------------------
void SysFlag_MasakiReset( EVENTWORK* ev )
{
	SysFlag_Reset( ev, SYS_FLAG_MASAKI );
	return;
}

//--------------------------------------------------------------------------------------------
/**
 * マサキフラグのチェック
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	"1 = フラグON"
 * @retval	"0 = フラグOFF"
 */
//--------------------------------------------------------------------------------------------
BOOL SysFlag_MasakiCheck( EVENTWORK* ev )
{
	return SysFlag_Check( ev, SYS_FLAG_MASAKI );
}


//============================================================================================
//
//	ポケッチ抑止関連
//
//============================================================================================
//--------------------------------------------------------------------------------------------
///	システムフラグセット：ポケッチ抑止
//--------------------------------------------------------------------------------------------
void SysFlag_PoketchHookSet(EVENTWORK * ev)
{
	SysFlag_Set(ev, SYS_FLAG_POKETCH_HOOK);
}
//--------------------------------------------------------------------------------------------
///	システムフラグリセット：ポケッチ抑止
//--------------------------------------------------------------------------------------------
void SysFlag_PoketchHookReset(EVENTWORK * ev)
{
	SysFlag_Reset(ev, SYS_FLAG_POKETCH_HOOK);
}
//--------------------------------------------------------------------------------------------
///	システムフラグ取得：ポケッチ抑止
//--------------------------------------------------------------------------------------------
BOOL SysFlag_PoketchHookCheck(EVENTWORK * ev)
{
	return SysFlag_Check(ev, SYS_FLAG_POKETCH_HOOK);
}

//============================================================================================
//		サファリモード関連
//============================================================================================
//--------------------------------------------------------------------------------------------
/**
 * @brief	サファリモードフラグのセット
 * @param	ev		EVENTWORKのポインタ
 */
//--------------------------------------------------------------------------------------------
void SysFlag_SafariSet(EVENTWORK * ev)
{
	SysFlag_Set(ev, SYS_FLAG_SAFARI_MODE);
}
//--------------------------------------------------------------------------------------------
/**
 * @brief	サファリモードフラグのリセット
 * @param	ev		EVENTWORKのポインタ
 */
//--------------------------------------------------------------------------------------------
void SysFlag_SafariReset(EVENTWORK * ev)
{
	SysFlag_Reset(ev, SYS_FLAG_SAFARI_MODE);
}
//--------------------------------------------------------------------------------------------
/**
 * @brief	サファリモードフラグのセット
 * @param	ev		EVENTWORKのポインタ
 * @return	BOOL	フラグの値
 */
//--------------------------------------------------------------------------------------------
BOOL SysFlag_SafariCheck(EVENTWORK * ev)
{
	return SysFlag_Check(ev, SYS_FLAG_SAFARI_MODE);
}

//============================================================================================
//		虫取り大会モード関連
//============================================================================================
//--------------------------------------------------------------------------------------------
/**
 * @brief	虫取り大会モードフラグのセット
 * @param	ev		EVENTWORKのポインタ
 */
//--------------------------------------------------------------------------------------------
void SysFlag_MushitoriSet(EVENTWORK * ev,BOOL set)
{
	if(set){
		SysFlag_Set(ev, SYS_FLAG_MUSHITORI_MODE);
	}else{
		SysFlag_Reset(ev, SYS_FLAG_MUSHITORI_MODE);
	}
}

//--------------------------------------------------------------------------------------------
/**
 * @brief	虫取り大会モードフラグのセット
 * @param	ev		EVENTWORKのポインタ
 * @return	BOOL	フラグの値
 */
//--------------------------------------------------------------------------------------------
BOOL SysFlag_MushitoriCheck(EVENTWORK * ev)
{
	return SysFlag_Check(ev, SYS_FLAG_MUSHITORI_MODE);
}

//============================================================================================
//		ポケパークモード関連
//============================================================================================
//--------------------------------------------------------------------------------------------
/**
 * @brief	ポケパークモードフラグのセット
 * @param	ev		EVENTWORKのポインタ
 */
//--------------------------------------------------------------------------------------------
void SysFlag_PokeParkSet(EVENTWORK * ev)
{
	SysFlag_Set(ev, SYS_FLAG_POKEPARK_MODE);
}
//--------------------------------------------------------------------------------------------
/**
 * @brief	ポケパークモードフラグのリセット
 * @param	ev		EVENTWORKのポインタ
 */
//--------------------------------------------------------------------------------------------
void SysFlag_PokeParkReset(EVENTWORK * ev)
{
	SysFlag_Reset(ev, SYS_FLAG_POKEPARK_MODE);
}
//--------------------------------------------------------------------------------------------
/**
 * @brief	ポケパークモードフラグのセット
 * @param	ev		EVENTWORKのポインタ
 * @return	BOOL	フラグの値
 */
//--------------------------------------------------------------------------------------------
BOOL SysFlag_PokeParkCheck(EVENTWORK * ev)
{
	return SysFlag_Check(ev, SYS_FLAG_POKEPARK_MODE);
}

//============================================================================================
//
//		サイクリングロード関連
//
//============================================================================================
//--------------------------------------------------------------------------------------------
/**
 * @brief	サイクリングロードモードフラグのセット
 * @param	ev		EVENTWORKのポインタ
 * @return	BOOL	フラグの値
 */
//--------------------------------------------------------------------------------------------
void SysFlag_CyclingRoadSet(EVENTWORK * ev)
{
	SysFlag_Set(ev, SYS_FLAG_CYCLINGROAD);
}
//--------------------------------------------------------------------------------------------
/**
 * @brief	サイクリングロードモードフラグのリセット
 * @param	ev		EVENTWORKのポインタ
 * @return	BOOL	フラグの値
 */
//--------------------------------------------------------------------------------------------
void SysFlag_CyclingRoadReset(EVENTWORK * ev)
{
	SysFlag_Reset(ev, SYS_FLAG_CYCLINGROAD);
}
//--------------------------------------------------------------------------------------------
/**
 * @brief	サイクリングロードモードフラグのチェック
 * @param	ev		EVENTWORKのポインタ
 * @return	BOOL	フラグの値
 */
//--------------------------------------------------------------------------------------------
BOOL SysFlag_CyclingRoadCheck(EVENTWORK * ev)
{
	return SysFlag_Check(ev, SYS_FLAG_CYCLINGROAD);
}

//============================================================================================
//
//	ひでんわざ関連
//
//============================================================================================
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
BOOL SysFlag_Kairiki( EVENTWORK* ev, SYSFLAG_MODE mode)
{
	return SysFlag_Common( ev, mode, SYS_FLAG_KAIRIKI );
}

//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
void SysFlag_FlashSet(EVENTWORK* ev)
{
	SysFlag_Set(ev, SYS_FLAG_FLASH);
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
void SysFlag_FlashReset(EVENTWORK* ev)
{
	SysFlag_Reset(ev, SYS_FLAG_FLASH);
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
BOOL SysFlag_FlashCheck(EVENTWORK* ev)
{
	return SysFlag_Check(ev, SYS_FLAG_FLASH);
}

//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
void SysFlag_KiribaraiSet(EVENTWORK* ev)
{
	SysFlag_Set(ev, SYS_FLAG_KIRIBARAI);
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
void SysFlag_KiribaraiReset(EVENTWORK* ev)
{
	SysFlag_Reset(ev, SYS_FLAG_KIRIBARAI);
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
BOOL SysFlag_KiribaraiCheck(EVENTWORK* ev)
{
	return SysFlag_Check(ev, SYS_FLAG_KIRIBARAI);
}

//============================================================================================
//		冒険ノート関連
//============================================================================================
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
BOOL SysFlag_FNote( EVENTWORK* ev, SYSFLAG_MODE mode )
{
	return SysFlag_Common( ev, mode, SYS_FLAG_FNOTE_GET );
}

//============================================================================================
//
//		到着フラグ関連
//
//============================================================================================
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
BOOL SysFlag_Arrive( EVENTWORK* ev, SYSFLAG_MODE mode, u32 arrive_id )
{
	GF_ASSERT( arrive_id < FLAG_ARRIVE_MAX );
	return SysFlag_Common( ev, mode, SYS_FLAG_ARRIVE_START + arrive_id );
}

//============================================================================================
//
//		イベント関連
//
//============================================================================================
//--------------------------------------------------------------------------------------------
/**
 * WiFiに繋いだ
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	none
 */
//--------------------------------------------------------------------------------------------
void SysFlag_WifiUseSet( EVENTWORK* ev )
{
	SysFlag_Set(ev, SYS_FLAG_WIFI_USE);
}


//--------------------------------------------------------------------------------------------
/**
 * @brief	メインメニュー用フラグ取得（１匹目のポケモン取得)
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	none
 */
//--------------------------------------------------------------------------------------------
BOOL SysFlag_FirstPokeGet( EVENTWORK* ev )
{
	return SysFlag_Check( ev, FE_FLAG_START+6 );
}

// セット
void SysFlag_FirstPokeSet( EVENTWORK* ev )
{
	SysFlag_Set( ev, FE_FLAG_START+6 );
}

//==============================================================================
/**
 * @brief   ポケギア取得済みかチェック
 *
 * @param   ev
 *
 * @retval  BOOL	0:まだ	1:取得済み
 */
//==============================================================================
BOOL SysFlag_PokeGearGet( EVENTWORK* ev )
{
	return SysFlag_Check( ev, FE_FLAG_START+56 );
}
// セット
void SysFlag_PokeGearSet( EVENTWORK* ev )
{
	SysFlag_Set( ev, FE_FLAG_START+56 );
}

//--------------------------------------------------------------------------------------------
/**
 * @brief	メインメニュー用フラグ取得（ジョウト図鑑取得)
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	none
 */
//--------------------------------------------------------------------------------------------
BOOL SysFlag_JohtoZukanGet( EVENTWORK* ev )
{
	return SysFlag_Check( ev, FE_FLAG_START+7 );

}

//==============================================================================
/**
 * @brief   メインメニューアイコンの表示フラグ取得
 *
 * @param   ev
 * @param   offset	(バッグ・カード・レポート・設定）の順
 *
 * @retval  BOOL	0 or 1
 */
//==============================================================================
BOOL SysFlag_MainMenuIconFlagGet( EVENTWORK* ev, int offset )
{
	GF_ASSERT( offset<4 );
	return SysFlag_Check( ev, FE_FLAG_START+183+offset );
}



// セット
void SysFlag_JohtoZukanSet( EVENTWORK* ev )
{
	SysFlag_Set( ev, FE_FLAG_START+7 );		// 一番最後のフラグセットなのでついでに
	SysFlag_Set( ev, FE_FLAG_START+183 );	// バッグ・カード・レポート・コンフィグもセット
	SysFlag_Set( ev, FE_FLAG_START+184 );	// saveflag.h参照
	SysFlag_Set( ev, FE_FLAG_START+185 );
	SysFlag_Set( ev, FE_FLAG_START+186 );
}

//===========================================================================================
//
//	アサギの灯台イベント関連
//
//============================================================================================
//--------------------------------------------------------------------------------------------
/**
 * アサギの灯台イベント　クリアフラグのチェック
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	"1 = フラグON"
 * @retval	"0 = フラグOFF"
 */
//--------------------------------------------------------------------------------------------
BOOL SysFlag_AsagiToudaiEvClearCheck( EVENTWORK* ev )
{
	return SysFlag_Check( ev, SYS_FLAG_ASAGI_TOUDAI_CLEAR );
}

//===========================================================================================
//
//	アジトB2 電波発生装置イベント関連
//
//============================================================================================
//--------------------------------------------------------------------------------------------
/**
 * アジトB2 電波発生装置停止イベント　クリアフラグのチェック
 *
 * @param	ev		EVENTWORKのポインタ
 * @param	id		マシンID(0<奥>-2<手前>)
 * @retval	"1 = フラグON"
 * @retval	"0 = フラグOFF"
 */
//--------------------------------------------------------------------------------------------
BOOL SysFlag_D35R0103Ajito_MechStopCheck( EVENTWORK* ev ,u8 id)
{
	if(id > 2){
		return FALSE;
	}
	return SysFlag_Check( ev, SYS_FLAG_D35R0103_AJITO_MECH01 + id );
}

//--------------------------------------------------------------------------------------------
/**
 * @brief	タンバジムの滝音環境音フックフラグのチェック
 * @param	ev		EVENTWORKのポインタ
 * @return	BOOL	フラグの値
 */
//--------------------------------------------------------------------------------------------
BOOL SysFlag_TanbaGymSeCheck(EVENTWORK * ev)
{
	return SysFlag_Check(ev, SYS_FLAG_GYM_SE);
}
//--------------------------------------------------------------------------------------------
/**
 * @brief	クチバジムの電撃環境音フックフラグのチェック
 * @param	ev		EVENTWORKのポインタ
 * @return	BOOL	フラグの値
 */
//--------------------------------------------------------------------------------------------
BOOL SysFlag_KutibaGymSeCheck(EVENTWORK * ev)
{
	return SysFlag_Check(ev, SYS_FLAG_KUTIBA_GYM_SE);
}

//--------------------------------------------------------------------------------------------
/**
 * @brief	ステータス画面でポケスロン用のページを表示するか？
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @retval	"1 = 表示可"
 * @retval	"0 = 表示不可"
 */
//--------------------------------------------------------------------------------------------
BOOL SysFlag_StatusPokethlonCheck( EVENTWORK *ev )
{
	return SysFlag_Check(ev, SYS_FLAG_STATUS_PKTH);
}

//==============================================================================
/**
 * @brief   モンスターボール取得イベントを終わらせているか？
 *
 * @param   ev
 *
 * @retval  BOOL	0:終わってない	1:終わっている
 */
//==============================================================================
BOOL SysFlag_MonsBallCheck( EVENTWORK *ev )
{
	return SysFlag_Check( ev, FE_R29_CAPTURE_DEMO );
}

//==============================================================================
/**
 * @brief   ボングリケース拡張フラグチェック
 *
 * @param   ev
 *
 * @retval  BOOL	1:拡張済み
 */
//==============================================================================
BOOL SysFlag_BongCaseExpandCheck( EVENTWORK *ev )
{
	return SysFlag_Check( ev, SYS_FLAG_BONGCASE_EX );
}

//==============================================================================
/**
 * @brief   波乗りＢＧＭ禁止フラグセット
 *
 * @param   ev
 *
 * @retval  none
 */
//==============================================================================
void SysFlag_SetNamiBGMFbdn( EVENTWORK *ev )
{
	SysFlag_Set( ev, SYS_FLAG_NAMI_BGM_FORBIDDEN );

}

//==============================================================================
/**
 * @brief   波乗りＢＧＭ禁止フラグリセット
 *
 * @param   ev
 *
 * @retval  none
 */
//==============================================================================
void SysFlag_ResetNamiBGMFbdn( EVENTWORK *ev )
{
	SysFlag_Reset( ev, SYS_FLAG_NAMI_BGM_FORBIDDEN );
}

//==============================================================================
/**
 * @brief   波乗りＢＧＭ禁止フラグチェック
 *
 * @param   ev
 *
 * @retval  BOOL	1:拡張済み
 */
//==============================================================================
BOOL SysFlag_CheckNamiBGMFbdn( EVENTWORK *ev )
{
	return SysFlag_Check( ev, SYS_FLAG_NAMI_BGM_FORBIDDEN );
}

//=============================================================================================
/**
 * カビゴン倒したかフラグチェック
 *
 * @param   ev
 *
 * @retval  BOOL	1:倒してる
 */
//=============================================================================================
BOOL SysFlag_CheckR11Kabigon( EVENTWORK *ev )
{
	return SysFlag_Check( ev, FE_R11_KABI_GET );
}


//=============================================================================================
/**
 * ロケット団アジト終了チェック（環境音用）
 *
 * @param   ev
 *
 * @retval  BOOL
 */
//=============================================================================================
BOOL SysFlag_CheckRocketAzitoEnd( EVENTWORK *ev )
{
	return SysFlag_Check( ev, FE_D35_RAJITO_END );

}

//=============================================================================================
/**
 * サファリのブロックカスタマイズを行ったかのフラグ状態をセット
 *
 * @param   ev
 */
//=============================================================================================
void SysFlag_SafariBlockCustomSet( EVENTWORK *ev ,BOOL set)
{
	if(set){
		SysFlag_Set(ev,SYS_FLAG_SAFARI_BLOCK_CUSTOM);
	}else{
		SysFlag_Reset(ev,SYS_FLAG_SAFARI_BLOCK_CUSTOM);
	}
}

//============================================================================================
//
//		デバッグ機能関連
//
//============================================================================================
#ifdef PM_DEBUG

//システムフラグ系をゲットする
u32 DNumInput_SysFlagGet(SAVEDATA* sv,u32 param)
{
	EVENTWORK* ev = SaveData_GetEventWork(sv);
	return SysFlag_Check( ev,param);
}
//システムフラグ系をセットする
void DNumInput_SysFlagSet(SAVEDATA* sv,u32 param,u32 value)
{
	EVENTWORK* ev = SaveData_GetEventWork(sv);
	if(value){
		SysFlag_Set(ev,param);
	}else{
		SysFlag_Reset(ev,param);
	}
}

#endif	//PM_DEBUG
